package es.udc.fbellas.j2ee.tiendaweb.model.usuariofacade.plain.actions;

import java.sql.Connection;

import java.sql.Date;
import es.udc.fbellas.j2ee.util.exceptions.InternalErrorException;
import es.udc.fbellas.j2ee.util.exceptions.DuplicateInstanceException;
import es.udc.fbellas.j2ee.util.sql.TransactionalPlainAction;
import es.udc.fbellas.j2ee.tiendaweb.model.usuario.TO.UsuarioProfileTO;
import es.udc.fbellas.j2ee.tiendaweb.model.tarjetabancaria.TO.TarjetaBancariaTO;
import es.udc.fbellas.j2ee.tiendaweb.model.direccionpostal.TO.DireccionPostalTO;
import es.udc.fbellas.j2ee.tiendaweb.model.usuario.DAO.SQLUsuarioProfileDAO;
import es.udc.fbellas.j2ee.tiendaweb.model.usuario.DAO.SQLUsuarioProfileDAOFactory;
import es.udc.fbellas.j2ee.tiendaweb.model.direccionpostal.DAO.SQLDireccionPostalDAO;
import es.udc.fbellas.j2ee.tiendaweb.model.direccionpostal.DAO.SQLDireccionPostalDAOFactory;
import es.udc.fbellas.j2ee.tiendaweb.model.tarjetabancaria.DAO.SQLTarjetaBancariaDAO;
import es.udc.fbellas.j2ee.tiendaweb.model.tarjetabancaria.DAO.SQLTarjetaBancariaDAOFactory;
import es.udc.fbellas.j2ee.tiendaweb.model.usuariofacade.util.PasswordEncrypter;

public class RegistrarUsuarioAction implements TransactionalPlainAction {
/*
    private String loginName;
    private String encryptedPassword;
    private String nombre;
	private String apellidos;
	private String email;
	private String nombreReceptor;
	private String calle;
	private int port;
	private String puerta;
	private int codPostal;
	private long numTarjeta;
	private Date fechaExp;
*/
	private UsuarioProfileTO usuarioProfileTO;
	private DireccionPostalTO direccionPostalTO;
	private TarjetaBancariaTO tarjetaBancariaTO;
	
    public RegistrarUsuarioAction(UsuarioProfileTO usuarioProfileTO, DireccionPostalTO direccionPostalTO, TarjetaBancariaTO tarjetaBancariaTO) {
/*        
        this.loginName = loginName;
        this.encryptedPassword = PasswordEncrypter.crypt(clearPassword);
		this.nombre = nombre;
		this.apellidos = apellidos;
		this.email = email;
		this.nombreReceptor = nombreReceptor;
		this.calle = calle;
		this.port = port;
		this.puerta = puerta;
		this.codPostal = codPostal;
		this.numTarjeta = numTarjeta;
		this.fechaExp = fechaExp;
*/
    	this.usuarioProfileTO = usuarioProfileTO;
    	this.direccionPostalTO = direccionPostalTO;
    	this.tarjetaBancariaTO = tarjetaBancariaTO;
    	usuarioProfileTO.setEncryptedPassword(PasswordEncrypter.crypt(usuarioProfileTO.getEncryptedPassword()));
    }
    
    /**
     *
     * @return <code>null</code>
     */
    public Object execute(Connection connection) 
        throws DuplicateInstanceException, InternalErrorException {

        SQLTarjetaBancariaDAO tarjetaBancariaDAO = SQLTarjetaBancariaDAOFactory.getDAO();
//   	    TarjetaBancariaTO tarjetaBancariaTO = new TarjetaBancariaTO(numTarjeta, fechaExp);

        tarjetaBancariaDAO.create(connection, tarjetaBancariaTO);

        SQLDireccionPostalDAO direccionPostalDAO = SQLDireccionPostalDAOFactory.getDAO();
//        DireccionPostalTO direccionPostalTO = new DireccionPostalTO(0, nombreReceptor, calle, port, puerta, codPostal);

        DireccionPostalTO direccionPostalTO2 = direccionPostalDAO.create(connection, direccionPostalTO);
        usuarioProfileTO.setIdDir(direccionPostalTO2.getIdDir());

        SQLUsuarioProfileDAO usuarioProfileDAO = SQLUsuarioProfileDAOFactory.getDAO();
/*        UsuarioProfileTO usuarioProfileTO = new UsuarioProfileTO(loginName,
            encryptedPassword, nombre, apellidos, email, direccionPostalTO2.getIdDir(), numTarjeta);
*/
        usuarioProfileDAO.create(connection, usuarioProfileTO);

        return null;            

    }
    
    /* 
     * This class is tested by
     * "es.udc.fbellas.j2ee.miniportal.model.userfacade.delegate.
     * UsuarioFacadeDelegateFactory".
     */    
    
}
